// 数据库初始化脚本
// 运行方式: node scripts/init-database.js

const mysql = require('mysql2/promise');
const fs = require('fs');
const path = require('path');
require('dotenv').config({ path: '.env.local' });

async function initDatabase() {
  console.log('🔧 开始初始化数据库...\n');

  const config = {
    host: process.env.DB_HOST || 'localhost',
    port: parseInt(process.env.DB_PORT || '3306'),
    user: process.env.DB_USER || 'root',
    password: process.env.DB_PASSWORD || '',
    database: process.env.DB_NAME || 'math_academy',
    multipleStatements: true, // 允许执行多条SQL语句
  };

  console.log('📋 数据库配置:');
  console.log(`   主机: ${config.host}`);
  console.log(`   端口: ${config.port}`);
  console.log(`   用户: ${config.user}`);
  console.log(`   数据库: ${config.database}\n`);

  try {
    // 读取SQL文件
    console.log('📖 读取初始化脚本...');
    const sqlFile = path.join(__dirname, '..', 'database', 'mysql-init-simple.sql');
    const sql = fs.readFileSync(sqlFile, 'utf8');
    console.log('✅ SQL脚本读取成功\n');

    // 连接数据库
    console.log('📡 连接到数据库...');
    const connection = await mysql.createConnection(config);
    console.log('✅ 数据库连接成功\n');

    // 执行SQL脚本
    console.log('⚙️  执行初始化脚本...');
    console.log('   这可能需要几秒钟，请稍候...\n');
    
    await connection.query(sql);
    
    console.log('✅ 初始化脚本执行成功\n');

    // 验证表是否创建成功
    console.log('🔍 验证数据表...');
    const [tables] = await connection.execute('SHOW TABLES');
    
    console.log(`✅ 成功创建 ${tables.length} 个数据表:\n`);
    tables.forEach((table, index) => {
      const tableName = Object.values(table)[0];
      console.log(`   ${index + 1}. ${tableName}`);
    });
    console.log('');

    // 关闭连接
    await connection.end();

    // 总结
    console.log('═══════════════════════════════════════');
    console.log('🎉 数据库初始化完成！');
    console.log('═══════════════════════════════════════');
    console.log('✅ 数据库连接正常');
    console.log(`✅ 成功创建 ${tables.length} 个数据表`);
    console.log('✅ 数据库结构初始化完成');
    console.log('═══════════════════════════════════════\n');
    
    console.log('💡 下一步:');
    console.log('   1. 创建管理员账户: node scripts/create-admin.js');
    console.log('   2. 启动开发服务器: npm run dev');
    console.log('   3. 访问应用: http://localhost:3000\n');

    return true;
  } catch (error) {
    console.log('\n❌ 数据库初始化失败!\n');
    console.error('错误信息:', error.message);
    
    if (error.code === 'ECONNREFUSED') {
      console.log('\n💡 解决方案:');
      console.log('   1. 确保MySQL服务正在运行');
      console.log('   2. 检查.env.local中的数据库配置\n');
    } else if (error.code === 'ER_ACCESS_DENIED_ERROR') {
      console.log('\n💡 解决方案:');
      console.log('   1. 检查数据库用户名和密码是否正确');
      console.log('   2. 确认.env.local中的DB_PASSWORD正确\n');
    } else if (error.code === 'ER_BAD_DB_ERROR') {
      console.log('\n💡 解决方案:');
      console.log('   1. 数据库不存在，请先创建数据库');
      console.log('   2. 在MySQL中执行: CREATE DATABASE math_academy;\n');
    }
    
    return false;
  }
}

// 运行脚本
initDatabase()
  .then((success) => {
    process.exit(success ? 0 : 1);
  })
  .catch((error) => {
    console.error('未预期的错误:', error);
    process.exit(1);
  });
